package co.com.bean.sedegrados;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.annotation.Resource;
import javax.ejb.SessionContext;
import javax.ejb.Stateless;

import co.com.smart.maestro.infraestructure.dto.ResponseJson;
import co.com.smart.maestro.infraestructure.dto.SedeGradosDTO;
import co.com.smart.mapper.Mapper;
import co.com.smart.persistence.entity.SedeGradosFacadeLocal;
import co.com.smart.persistence.entity.dto.SmartSedeGrados;
import co.com.smart.session.DelegateContextEJB;
import co.com.smart.utilidades.Constantes;

/**
 * Session Bean implementation class SedeGradosBean
 */
@Stateless(mappedName = "ejb/SedeGradosBean")
public class SedeGradosBean implements SedeGradosBeanLocal{
	private SedeGradosFacadeLocal facade;
	
	@Resource
	private SessionContext session;
	
	public SedeGradosBean(){
		facade = DelegateContextEJB.getSedeGradosFacadeLocal();
	}
	
	

	@Override
	public ResponseJson insertarSedeGrados(SedeGradosDTO sedeGradosDTO) {

		ResponseJson response = new ResponseJson(); 
		try {
			sedeGradosDTO.setSmcousuario(session.getCallerPrincipal().getName());				
			sedeGradosDTO.setSmFhingreso(new Date());
			facade.create(Mapper.mapperDtoToSmartSedeGrados(sedeGradosDTO));
			response.setCodigo(Constantes.StatusResponse.OK.getStatus());
			response.setMensaje(Constantes.MensajeResponse.MSJ_OK.getMensajeStatuss()+ "SedeGrados almacenado.");
			response.setMensajeInterno(Constantes.MensajeResponse.MSJ_OK.getMensajeStatuss()+ "SedeGrados almacenado.");
		} catch (Throwable e) {
			System.err.println("Error insertando el SedeGrados -> " + e.getMessage());
			response.setCodigo(Constantes.StatusResponse.ERROR.getStatus());
			response.setMensaje(Constantes.MensajeResponse.MSJ_ERROR.getMensajeStatuss()+ "No fue posible almacenar la SedeGrados.");
			response.setMensajeInterno(Constantes.MensajeResponse.MSJ_ERROR.getMensajeStatuss()+e.getMessage());
		}

		return response ;
	}
	
	@Override
	public List<SedeGradosDTO> consultarAllSedeGrados(){
		List<SedeGradosDTO> SedeGrados = new ArrayList<SedeGradosDTO>();
		for (SmartSedeGrados entity : facade.findAll()) {
			if(entity.getSmFhretiro() == null){
				SedeGrados.add(Mapper.mapperSmartSedeGradosToDto(entity));
			}
		}

		return SedeGrados;
	}

	@Override
	public SedeGradosDTO consultarSedeGradosId(SedeGradosDTO sedeGradosDTO) {
		SedeGradosDTO sedeGrados = new SedeGradosDTO();
		
		SmartSedeGrados entity  = facade.find(sedeGradosDTO.getSmScsedesgrados());
		if(entity != null && entity.getSmFhretiro() == null){
			sedeGrados = Mapper.mapperSmartSedeGradosToDto(entity);
		}
		return sedeGrados;
	}

	@Override
	public ResponseJson editSedeGrados(SedeGradosDTO sedeGrados) {
		ResponseJson response = new ResponseJson(); 
		try {
			sedeGrados.setSmFhmodificacion(new Date());
			facade.edit(Mapper.mapperDtoToSmartSedeGrados(sedeGrados));
			response.setCodigo(Constantes.StatusResponse.OK.getStatus());
			response.setMensaje(Constantes.MensajeResponse.MSJ_OK.getMensajeStatuss()+ "SedeGrados editado.");
			response.setMensajeInterno(Constantes.MensajeResponse.MSJ_OK.getMensajeStatuss()+ "SedeGrados editado.");
		} catch (Throwable e) {
			System.err.println("Error editando el SedeGrados -> " + e.getMessage());
			response.setCodigo(Constantes.StatusResponse.ERROR.getStatus());
			response.setMensaje(Constantes.MensajeResponse.MSJ_ERROR.getMensajeStatuss()+ "No fue posible editar la SedeGrados.");
			response.setMensajeInterno(Constantes.MensajeResponse.MSJ_ERROR.getMensajeStatuss()+e.getMessage());
		}

		return response ;
	}

	@Override
	public ResponseJson removeSedeGrados(SedeGradosDTO sedeGrados,  boolean logic) {
		ResponseJson response = new ResponseJson(); 
		if(logic){
			try {
				sedeGrados.setSmFhretiro(new Date());
				sedeGrados.setSmFhmodificacion(new Date());
				facade.edit(Mapper.mapperDtoToSmartSedeGrados(sedeGrados));
				response.setCodigo(Constantes.StatusResponse.OK.getStatus());
				response.setMensaje(Constantes.MensajeResponse.MSJ_OK.getMensajeStatuss()+ "SedeGrados inactivado");
				response.setMensajeInterno(Constantes.MensajeResponse.MSJ_OK.getMensajeStatuss()+ "SedeGrados inactivado.");
			} catch (Throwable e) {
				System.err.println("Error editando el SedeGrados -> " + e.getMessage());
				response.setCodigo(Constantes.StatusResponse.ERROR.getStatus());
				response.setMensaje(Constantes.MensajeResponse.MSJ_ERROR.getMensajeStatuss()+ "No fue posible inactivar el SedeGrados.");
				response.setMensajeInterno(Constantes.MensajeResponse.MSJ_ERROR.getMensajeStatuss()+e.getMessage());
			}
		}else{
			try {
				facade.remove(Mapper.mapperDtoToSmartSedeGrados(sedeGrados));
				response.setCodigo(Constantes.StatusResponse.OK.getStatus());
				response.setMensaje(Constantes.MensajeResponse.MSJ_OK.getMensajeStatuss()+ "SedeGrados eliminado");
				response.setMensajeInterno(Constantes.MensajeResponse.MSJ_OK.getMensajeStatuss()+ "SedeGrados eliminado.");
			} catch (Throwable e) {
				System.err.println("Error eliminando el SedeGrados -> " + e.getMessage());
				response.setCodigo(Constantes.StatusResponse.ERROR.getStatus());
				response.setMensaje(Constantes.MensajeResponse.MSJ_ERROR.getMensajeStatuss()+ "No fue posible eliminar el SedeGrados.");
				response.setMensajeInterno(Constantes.MensajeResponse.MSJ_ERROR.getMensajeStatuss()+e.getMessage());
			}
		}
		return response ;
	}
}
